/* 
    删除有序数组中的重复项
    
    给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
    不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    输入：nums = [1,1,2]
    输出：2, nums = [1,2]

    输入：nums = [0,0,1,1,1,2,2,3,3,4]
    输出：5, nums = [0,1,2,3,4]
*/

{
  /**
   * 双指针, 从前往后移动, 遇到相同不能直接删除而是替换, 是因为从前往后, 如果删除, 那么原有的元素的索引发生了变化
   * [0, 0, 1] ==> [0, 1, 1]  第二项的0替换成后一项(前提不相同), 那么当前指针的位置就是整个不重复数组的最后一位, return i + 1;
   * @param {*} nums
   */
  var removeDuplicates = function (nums) {
    let slow = 0,
      fast = 1,
      len = nums.length;
    while (fast < len) {
      if (nums[slow] === nums[fast]) {
        fast++;
      } else {
        slow++;
        nums[slow] = nums[fast];
        fast++;
      }
    }
    return slow + 1;
  };
  const nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
  console.log(removeDuplicates(nums));
}
